<?php
class Room_Controller extends Base_Controller
{
    public $restful = true;

    public function get_post($house_id)
    {
        $house = House::find($house_id);
        if (is_not_null($house)) {
            return  view('room.post', compact('house_id', 'house'));
        } else {
            return message_page(array(
                'content' => 'Yêu cầu không hợp lệ, vui lòng kiểm tra lại',
                'redirect_url' => action('house@manage'),
                'type' => 'error'
            ));
        }
    }

    public function post_post()
    {
        if (!Input::has('house_id')) {
            return message_page(array(
                'content' => 'Dữ liệu cung cấp không hợp lệ',
                'type' => 'error',
                'redirect_url' => action('house@manage')
            ));
        }

        $house = House::find(Input::get('house_id'));
        if (!MyAuth::has_house_privileges($house->id)) {
            return message_page(array(
                'content' => 'Không đủ quyền cập nhật nhà trọ này',
                'type' => 'error'
            ));
        }

        $rules = array(
            'area' => 'required|numeric|min:0',
            'toilet' => 'required|in:0,1',
            'capacity' => 'required|numeric|min:1',
            'blank' => 'required|numeric|min:0',
            'price' => 'required|numeric|min:0',
            'water_price' => 'required|numeric|min:0',
            'electric_price' => 'required|numeric|min:0'
        );

        $validator = Validator::make(Input::get(), $rules);
        if ($validator->fails()) {
            dd($validator->errors);
            return Redirect::to_action('room@post', array($house->id))
                ->with_errors($validator->errors)->with_input();
        }

        $data = Input::get();

        $this->fill($data);

        $house->rooms()->insert($data);

        return message_page(array(
            'content' => 'Thêm loại phòng của nhà trọ <strong>' . $house->house_name .
                '</strong> thành công!',
            'title' => 'Thêm loại phòng',
            'redirect_url' => $house->url
        ));
    }

    public function get_delete($id)
    {
        if (!$this->has_privileges($id)) {
            return error('Không đủ quyền cập nhật loại phòng này hoặc có lỗi xảy ra.', 'Từ chối truy cập', Request::referrer());
        } else {
            return confirm("Bạn muốn xóa loại phòng của nhà trọ <strong>" . Room::find($id)->house->house_name .
                '</strong>?', 'Xác nhận xóa', action('room@delete', array($id)), Request::referrer());
        }
    }

    public function post_delete($id)
    {
        $room = Room::find($id);
        $url = $room->house->url;
        $code = -1;
        if (MyAuth::admin() || MyAuth::user()-> id == $room->house->user_id) {
            $room->delete();
            $code = 1;
        }
        if (Request::ajax()) {
            return \Laravel\Response::json(compact('code'));
        } else {
            return message('Xóa loại phòng trọ thành công!', 'Xóa loại phòng', $url);
        }
    }

    public function get_update($id)
    {
        pre_login_url(Request::referrer());
        if (!$this->has_privileges($id)) {
            return error('Bạn không đủ quyền cập nhật loại phòng này', 'Từ chối truy cập',
                pre_login_url());
        }

        $room = Room::find($id);
        $house = $room->house;

        $updating = true;
        return view('room.post', compact('room', 'house', 'updating'));
    }

    public function post_update($id)
    {


        if (!$this->has_privileges($id)) {
            return error('Bạn không đủ quyền cập nhật loại phòng này', 'Từ chối truy cập',
                pre_login_url());
        }

        $rules = array(
            'area' => 'required|numeric|min:0',
            'toilet' => 'required|in:0,1',
            'capacity' => 'required|numeric|min:1',
            'blank' => 'required|numeric|min:0',
            'price' => 'required|numeric|min:0',
            'water_price' => 'required|numeric|min:0',
            'electric_price' => 'required|numeric|min:0'
        );

        $room = Room::find($id);

        $validator = Validator::make(Input::get(), $rules);
        if ($validator->fails()) {
            dd($validator->errors);
            return Redirect::to_action('room@update', array($id))
                ->with_errors($validator->errors)->with_input();
        }

        $data = Input::get();

        $this->fill($data);
        $room->fill($data)->save();

        return message('Mọi thay đổi cho phòng trọ đã được lưu thành công!', 'Cập nhật phòng trọ',
            $room->house->url
        );

    }

    /**
     * Kiểm tra người dùng hiện tại có đủ quyền cập nhật loại phòng nào đó
     * @param $room_id int loại phòng cần kiểm tra
     * @return bool
     */
    private function has_privileges($room_id)
    {
        $room = Room::find($room_id);
        return is_not_null($room) && MyAuth::check() && (MyAuth::admin() || MyAuth::user()->id == $room->house->user_id);
    }

    /**
     * Hợp lệ các trường checkbox khi dữ liệu k được gửi
     * @param $data
     */
    private function fill(&$data)
    {
        $fields = array('house_id', 'area', 'garret', 'capacity', 'internet', 'tv',
                    'air_condition', 'toilet', 'price', 'electric_price', 'water_price',
            'blank', 'note'
        );

        $data = array_only($data, $fields);

        foreach ($fields as $field) {
            isset($data[$field]) || $data[$field] = false;
        }
    }
}